<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of CustoBO
 *
 * @author thales
 */
class CustoBO {
    private $tipoCusto;
    private $custo;
    private $conn;
    
    public function __construct() {
        $this->conn       = DB::getConn();
        $this->tipoCusto  = new TipoCustoVO();
        $this->custo      = new CustosVO();
    }
    
    public function getTipoCusto() {
        return $this->tipoCusto;
    }

    public function getCusto() {
        return $this->custo;
    }

    public function getConn() {
        return $this->conn;
    }

        
    public static function pegarDadosTipoCusto($descricao){
        $objCustoBO = new CustoBO();
        $objTipoCustoDAO = new TipoCustoDAO();
        
        if ( strlen($descricao) > 0) {
            $descricao =  $descricao . '%';
        }
        
        $objCustoBO->getTipoCusto()->setDescricao($descricao);
        
        $resultado = $objTipoCustoDAO->pesquisarDados($objCustoBO->getTipoCusto());
        
        if ( !$resultado ) {
            throw new UserException('Nenhum resultado encontrado');
        }
        
        return $resultado;
    }
    
    public static function pegarDadoTipoCusto($id){
        $objCustoBO = new CustoBO();
        $objTipoCustoDAO = new TipoCustoDAO();

        $objCustoBO->getTipoCusto()->setId($id);
        
        if ( !$objTipoCustoDAO->pesquisar($objCustoBO->getTipoCusto()) ) {
            throw new UserException('Nenhum resultado encontrado');
        }
        
        return $objCustoBO->getTipoCusto();
    }
    
    public function cadastarTipoDeCusto( $descricao ){
        $this->getTipoCusto()->setDescricao($descricao);
        
        $objTipoCustoDAO = new TipoCustoDAO();
        
        $this->conn->beginTransaction();
        
        if ( !$objTipoCustoDAO->salvar($this->getTipoCusto()) ) {
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar o tipo de custo! Tente mais tarde!');
        }
        
        $this->conn->commit();
    }
    
    public function alterarTipoCusto($id, $descricao){
        $this->getTipoCusto()->setId($id);
        $this->getTipoCusto()->setDescricao($descricao);

        $objTipoCustoDAO = new TipoCustoDAO();
        
        $this->conn->beginTransaction();
        
        if ( !$objTipoCustoDAO->alterar($this->getTipoCusto()) ) {
            $this->conn->rollBack();
            throw new UserException('Não foi possível alterar o tipo de custo! Tente mais tarde!');
        }
        
        $this->conn->commit();
    }
    
    public function excluirTipoCusto($id){
        $this->getTipoCusto()->setId($id);
        
         $objTipoCustoDAO = new TipoCustoDAO();
        
        $this->conn->beginTransaction();
        
        if ( !$objTipoCustoDAO->excluir($this->getTipoCusto()) ) {
            $this->conn->rollBack();
            throw new UserException('Não foi possível excluir o tipo de custo! Tente mais tarde!');
        }
        
        $this->conn->commit();
    }
}

?>
